//
//  LXSExtensionCompatible.swift
//  FrameProduct
//
//  Created by delegate on 2024/2/3.
//

import Foundation

public struct LXS<Base> {
    // 可扩展的基础对象
    public let base: Base
    init(_ base: Base) {
        self.base = base
    }
}

// 通过协议扩展【类、结构体、对象】的前缀属性
public protocol LXSExtensionCompatible {
    associatedtype ComplatibleType
    // 实现此协议的活着class的对象 可以直接调用 .lxs，比如 str.lxs.func()
    var lxs: LXS<ComplatibleType> { get set }
    // 实现此协议的类或者class 可以直接调用 .lxs，比如String.lxs.classFunc()
    static var lxs: LXS<ComplatibleType>.Type { get set }
}

public extension LXSExtensionCompatible {
    var lxs: LXS<Self> {
        // 原本使用计算属性就够了，但是为了让我们可以以后使用mutating声明的可变对象，所以实现set()
        set {}
        
        get {
            LXS<Self>(self)
        }
    }
    
    static var lxs: LXS<Self>.Type {
        set {}
        get {
            LXS<Self>.self
        }
    }
}
